#ifndef UI_OPERATE_MANAGER_02_H
#define UI_OPERATE_MANAGER_02_H

/*****************************************************************************************
  @Copyright  2020-2021
  @Date       2021-04-07
  @Author     qiaowei
  @Contact    weiweiqiao@126.com
  @Version    1.0
  @Brief      UI操作类，将UI传来的用户操作传递给不同的类进行处理
  @Other      None
  @History
      @Date   20210407
      @Author qiaowei
      @Brief  增加sl_open_file方法，根据文件名列表，依次打开文件列表
              增加sl_split_file_content方法，将文件内容进行拆分
              增加sl_exit_application方法，退出程序
              增加start_file_thread方法，启动子线程
              增加file_thread_变量，将file_process_放入子线程file_thread_
              增加file_process_变量，处理文件
  @Functions  None
******************************************************************************************/

#include <QObject>
#include <QThread>

class Track_process_02;
class File_process_02;
class Track_data_02;

class Ui_operate_manager_02 : public QObject
{
    Q_OBJECT

public:
    explicit Ui_operate_manager_02(QObject *parent = nullptr);
    ~Ui_operate_manager_02();

    void get_filter_conditions(QMap<QString, QVariant>* filter, QList<Track_data_02*>* list);

public slots:
    /***************************************************************************
     @Date     2021-04-07
     @Author   qiaowei
     @Contact  weiweiqiao@126.com
     @Version  1.0
     @Brief    None
    ***************************************************************************/
    void sl_open_files(QStringList file_name_list);

    void sl_split_file_content(QStringList file_name_list);

    void sl_exit_application();

signals:
    void si_open_file(QStringList file_name_list);

    void si_split_file_content(QStringList file_name_list);

    void si_send_track_to_model(Track_data_02* data);

    void si_send_track_to_process(QMap<QString, QVariant>* filter, QList<Track_data_02*>* list);

    void si_updte_model_by_filter(int row, bool flag);

private:
    void init_connections();

    /***************************************************************************
     @Date     2021-04-07
     @Author   qiaowei
     @Contact  weiweiqiao@126.com
     @Version  1.0
     @Brief    将process放入thread中，启动子线程
     @Param    thread 子线程
     @Param    process 在子线程中的操作
    ***************************************************************************/
    void start_file_thread(QThread& thread, QObject* process);

private:
    /***************************************************************************
     @Date     2021-04-07
     @Author   qiaowei
     @Contact  weiweiqiao@126.com
     @Version  1.0
     @Brief    子线程，放置file_process_变量
    ***************************************************************************/
    QThread file_thread_;

    /***************************************************************************
     @Date     2021-04-07
     @Author   qiaowei
     @Contact  weiweiqiao@126.com
     @Version  1.0
     @Brief    处理文件变量，包括读取文件，拆分文件内容
    ***************************************************************************/
    File_process_02* file_process_;

    QThread track_thread_;
    Track_process_02* track_process_;
};

#endif // UI_OPERATE_MANAGER_02_H
